package com.jpowernode.service;

import com.jpowernode.entity.Flower;

public class FlowerService {
	/**
	 * 保存鲜花数据的数组
	 */
	private static Flower[] elementData = new Flower[25];
	/**
	 * 保存实际存放鲜花的个数
	 */
	private static int size;

	/**
	 * 给elementData添加默认数据
	 */
	static {
		elementData[size++] = new Flower(1003,"金色玫瑰-香槟玫瑰",10,318,"2016-12-12","王二呢","");
		elementData[size++] = new Flower(1005,"初心永不变-白玫瑰",99,538,"2016-12-20","张欣雨","");
		elementData[size++] = new Flower(1001,"梦里花开-紫色桔梗",40,148,"2016-12-24","王二呢","眼波如水,映出窗外繁星点点");
		elementData[size++] = new Flower(1004,"心花怒放-粉香百合",120,188,"2016-12-26","王二呢","内层银灰色后棉纸,外层深蓝色条纹纸,银灰色缎带");
		elementData[size++] = new Flower(1002,"致青春-无声的爱",210,219,"2016-12-18","张欣雨","我爱你,胜过爱爱情,更胜过爱自己!");
	}
	
	/**
	 * 获取实际存放元素的个数
	 */
	public int size() {
		return size;
	}
	/**
	 * 获取所有的鲜花集合
	 * @return 返回所有的鲜花
	 */
	public Flower[] findAllFlower() {
		// 1.返回排序好的数组
		return elementData;
	}

	/**
	 * 通过id获取指定的鲜花对象
	 * @param id 鲜花id
	 * @return 返回id所对应的鲜花对象
	 */
	public Flower getFlowerById(int id) {
		// 1.遍历elementData中的元素
		for(int i = 0; i < size; i++) {
			Flower flower = elementData[i];
			// 2.让flower.id和形参id做比较
			if(flower.getId() == id) {
				// 3.返回flower鲜花对象
				return flower;
			}
		}
		// 4.执行到此处，证明不存在该鲜花对象
		return null;
	}
	/**
	 * 删除指定鲜花对象
	 * @param flower 需要删除的鲜花对象
	 * @return 如果删除成功，则返回true，否则返回false
	 */
	public boolean deleteFlowerByElement(Flower flower) {
		// 0.判断flower对象是否为null
		if(flower == null) {
			throw new NullPointerException("flower为null！");
		}
		// 1.通过循环获取elementData中所有的鲜花对象
		for(int i = 0; i < elementData.length; i++) {
			// 2.判断elementData[i]和flower对象是否相等
			// flower存储的就是elementData某个元素的地址！
			if(flower == elementData[i]) { // 建议
				// 3.删除元素并返回
				return remove(i);
			}
		}
		// 如果执行到此处，证明flower在数组中不存在，则返回删除失败
		return false;
	}
	/**
	 * 添加鲜花对象
	 * @param flower 需要添加的鲜花对象
	 * @return 如果添加成功，则返回true，否则返回false
	 */
	public boolean insertFlowerByElement(Flower flower) {
		// 1.检查elementData数组是否需要扩容
		checkRange();
		// 2.在数组的末尾追加一个鲜花对象
		elementData[size++] = flower;
		// 3.返回元素添加成功
		return true;
	}
	/**
	 * 判断是否需要执行扩容操作，如果需要则执行扩容操作即可！
	 */
	private void checkRange() {
		// 1.判断是否需要扩容
		if(size == elementData.length) {
			// 2.创建一个空间长度更大的新数组
			Flower[] newArr = new Flower[size + 1];
			// 3.把源数组中的元素拷贝到新的数组中
			System.arraycopy(elementData, 0, newArr, 0, size);
			// 4.让elementData指向新创建的数组
			elementData = newArr;
		}
	}
	
	/**
	 * 根据索引删除数组元素
	 * @param index 索引
	 * @return 删除成功，则返回true，否则返回false
	 */
	private boolean remove(int index) {
		// 1.把index之后的元素往前挪动一位
		for(int i = index; i < size - 1; i++) {
			// 把后面的元素往前挪动一位
			elementData[i] = elementData[i + 1];
		}
		// 2.把数组最后一个元素设置为默认值，并更新size的值
		elementData[--size] = null;
		// 3.返回删除成功
		return true;
	}
}
